package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.SpffVideos;

/**
 * 视频Mapper接口
 * 
 * @author xjj
 * @date 2025-09-11
 */
public interface SpffVideosMapper 
{
    /**
     * 查询视频
     * 
     * @param id 视频主键
     * @return 视频
     */
    public SpffVideos selectSpffVideosById(Long id);

    /**
     * 查询视频列表
     * 
     * @param spffVideos 视频
     * @return 视频集合
     */
    public List<SpffVideos> selectSpffVideosList(SpffVideos spffVideos);

    /**
     * 新增视频
     * 
     * @param spffVideos 视频
     * @return 结果
     */
    public int insertSpffVideos(SpffVideos spffVideos);

    /**
     * 修改视频
     * 
     * @param spffVideos 视频
     * @return 结果
     */
    public int updateSpffVideos(SpffVideos spffVideos);

    /**
     * 删除视频
     * 
     * @param id 视频主键
     * @return 结果
     */
    public int deleteSpffVideosById(Long id);

    /**
     * 批量删除视频
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSpffVideosByIds(Long[] ids);

    /**
     * 个性化推荐视频
     * 基于用户历史行为推荐相似视频
     * 
     * @param params 参数map：userId, offset, limit
     * @return 推荐视频列表
     */
    public List<SpffVideos> selectPersonalizedRecommend(Map<String, Object> params);

    /**
     * 获取热门视频
     * 按热度值排序
     * 
     * @param params 参数map：type, categoryId, offset, limit
     * @return 热门视频列表
     */
    public List<SpffVideos> selectHotVideos(Map<String, Object> params);

    /**
     * 获取附近视频
     * 按地理位置查询
     * 
     * @param params 参数map：minLatitude, maxLatitude, minLongitude, maxLongitude, offset, limit
     * @return 附近视频列表
     */
    public List<SpffVideos> selectNearbyVideos(Map<String, Object> params);

    /**
     * 综合搜索视频
     * 支持关键词、分类、标签等多维度搜索
     * 
     * @param params 搜索参数map：keyword, categoryId, tags, userId, location, sortBy, offset, limit
     * @return 搜索结果列表
     */
    public List<SpffVideos> searchVideos(Map<String, Object> params);

    /**
     * 获取搜索建议
     * 基于视频标题的模糊匹配
     * 
     * @param params 参数map：prefix, limit
     * @return 搜索建议列表
     */
    public List<String> getSearchSuggestions(Map<String, Object> params);

    /**
     * 统计搜索结果数量
     * 
     * @param params 搜索参数map
     * @return 结果数量
     */
    public Integer countSearchResults(Map<String, Object> params);

    /**
     * 获取最新视频
     * 按创建时间倒序
     * 
     * @param params 参数map：categoryId, offset, limit
     * @return 最新视频列表
     */
    public List<SpffVideos> selectLatestVideos(Map<String, Object> params);

    /**
     * 随机获取视频
     * 
     * @param params 参数map：limit
     * @return 随机视频列表
     */
    public List<SpffVideos> selectRandomVideos(Map<String, Object> params);

    /**
     * 根据视频ID列表批量查询视频
     * 
     * @param videoIds 视频ID列表
     * @return 视频列表
     */
    public List<SpffVideos> selectSpffVideosByIds(List<Long> videoIds);

    /**
     * 获取所有有视频的分类ID
     * 
     * @return 分类ID列表
     */
    public List<Long> selectAllCategoryIds();
    
    /**
     * 增加视频点赞数
     * 
     * @param id 视频ID
     * @return 结果
     */
    public int incrementLikeCount(Long id);
    
    /**
     * 减少视频点赞数
     * 
     * @param id 视频ID
     * @return 结果
     */
    public int decrementLikeCount(Long id);
    
    /**
     * 增加视频收藏数
     * 
     * @param id 视频ID
     * @return 结果
     */
    public int incrementCollectCount(Long id);
    
    /**
     * 减少视频收藏数
     * 
     * @param id 视频ID
     * @return 结果
     */
    public int decrementCollectCount(Long id);
}
